package com.mp.negocio;

import com.mp.dao.NomeclaturaLocalDAO;
import com.mp.db.jpa.modelo.GeoLocalizacao;
import com.mp.db.jpa.modelo.NomeclaturaLocal;
import com.mp.db.jpa.modelo.SessaoUsuario;
import com.mp.db.jpa.modelo.Usuario;
import java.util.List;


public class NomeclaturaLocalService 
{
    
    private NomeclaturaLocalDAO nomDAO = new NomeclaturaLocalDAO();
    private SessaoUsuarioService sessaoUsuarioService  = new SessaoUsuarioService();
    private UsuarioService usuarioService  = new UsuarioService();
    
      
    public NomeclaturaLocal obterNomeclaturaLocal(int id) throws Exception
    {
       NomeclaturaLocal nomLocal = nomDAO.obterNomeclaturaLocal(id);
       
       if(nomLocal == null)
       {
          throw new Exception("Nehuma nomeclatura local foi encontrada."); 
       }
       else
       {
           return nomLocal;           
       }
    }
    
    public NomeclaturaLocal obterNomeclaturaLocalPorDesc(String desc,Integer idUsuario) throws Exception 
    {
        Usuario usr = usuarioService.obterUsuario(idUsuario);
        
        return nomDAO.obterNomeclaturaLocalPorDesc(desc,usr);     
    }
    
     public List<NomeclaturaLocal> obterListaNomeclaturaLocalPorUsuario(Integer idSessao) throws Exception
    {
        SessaoUsuario sessaoBanco = sessaoUsuarioService.obterSessaoUsuario(idSessao); 
        
        List<NomeclaturaLocal> lista = nomDAO.obterListaNomeclaturaLocalPorUsuario(sessaoBanco.getUsuario());
        
        if(lista.isEmpty())
        {
            throw new Exception("Não foram encontrados nenhuma nomeclatura para o usuario informado.");            
        }
       
        return lista;
        
    }   
    
    public void gravarNomeclaturaLocal(String labelEndereco,String descNomeclaturaLocal,int idSessao,String idGeoLocalizacaoLat, String idGeoLocalizacaoLon) throws Exception
    {
        SessaoUsuario sessao = sessaoUsuarioService.obterSessaoUsuario(idSessao); 
        
        NomeclaturaLocal nomLocal = this.obterNomeclaturaLocalPorDesc(descNomeclaturaLocal,sessao.getUsuario().getIdUsuario());
        
        if(nomLocal == null)
        {
            
            GeoLocalizacao geo = new GeoLocalizacao();
               geo.setDescLatitude(idGeoLocalizacaoLat);
               geo.setDescLongitude(idGeoLocalizacaoLon);
          
            nomLocal = new NomeclaturaLocal();
            nomLocal.setDescNomeclaturaLocal(descNomeclaturaLocal);
            nomLocal.setLabelNomeclaturaLocal(labelEndereco);
            nomLocal.setUsuario(sessao.getUsuario());
            nomLocal.setGeoLocalizacao(geo);
            
            nomDAO.gravarNomeclaturaLocal(nomLocal);  
        }
        else
        {
            throw new Exception("Uma localidade já foi cadastrada com esse endereço.");
        }
    }
 
}
